package thread;

/**
 * 一般情况下，可见性有问题的案例
 */
public class CantExitTest {
    //通过添加 volatile 让工作线程，时刻同步主内存中的值。就可以停下来了。
    volatile static boolean run = true;

    public static void main(String[] args) throws InterruptedException {
        Thread t = new Thread(()->{
            while(run){
                // ....
            }
        });
        t.start();

        Thread.sleep(1000);
        //线程t不会如预想的停下来
        //停不下来的根本原因是：主线程修改了run的状态，t线程无法立刻感知到（在测试中，它永远不会停止，这是JMM特性决定的）。
        run = false;

        //【t.join】只有线程t结束的时候，这个程序才会中止，但是测试显示，它不会在1s中停下来。
        t.join();
    }

}
